3.6.3.9 PEメモリ書き込み⇒PEメモリ読み出し
LM0/LM1に書き込んだ後は、ポート衝突により 2 ステップ空けてからでないと読み出しを開始できない。
GRF0/GRF1に書き込んだ後は、データ競合により 1 ステップ空けてからでないと同じアドレスからは読み出しを開始できない。
異なるアドレスであれば同時に書き込みと読み出しを独立に発行できる。
Tレジスタに書き込んだ後は、データ競合により 1 ステップ空けてからでないと読み出しを開始できない。
LM、GRF、Tレジスタのいずれでも、読み出しと書き込みを同じステップに行うことは問題ない。
読み出しではすでに書き込まれたデータが読み出される。
正確には、マスクレジスタを除くPEメモリへの書き込みを伴う命令は完了まで 6 サイクルを要する。
アセンブラのハザード検出機構を使って以下が確かめられる。
次のアセンブリ列は正常にアセンブルできる。
code:txt
imm f"1.0"$r0/1000
nop
dvadd $lm0v $r0e $ln0v
/1000は書き込みマスク指定である。
書き込みマスク指定の仕様は3.6.2.1 書き込みマスク適用を参照のこと。
マスク指定によりimmのサイクルでは最初のサイクルでのみ$r0への書き込みが起こっており、それ以降次ステップのnopと合わせてdvaddの開始までに 7 サイクル空いているためである。
同様に、マスク指定を/0100(第 2 サイクルでのみ書き込み)としても 6 サイクルの空きがあるため問題ない。
しかし、これを/0010(第 3 サイクルでのみ書き込み)または/0001(第 4 サイクルでのみ書き込み)とすると、サイクルの空きが 6 未満になってしまうため、アセンブラはこれを検出してエラーとする。
マスクレジスタへの書き込み結果は次のステップで利用可能である。
たとえば、次は有効なアセンブリ列である。
code:txt
lpassa $lm0v $omr1
lpassa $ln0v $lr0v/$imr1